package com.lml.jdk8.localdate.java8Time;

import org.junit.jupiter.api.Test;

import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.ChronoField;

/**
 * @author luomingliang
 * @date 2021/9/12 17:55
 */
public class Java8TimeMethodWithDemo {

    /**
     * LocalDateTime withNano(int i) 修改纳秒
     * LocalDateTime withSecond(int i) 修改秒
     * LocalDateTime withMinute(int i) 修改分钟
     * LocalDateTime withHour(int i) 修改小时
     * LocalDateTime withDayOfMonth(int i) 修改日
     * LocalDateTime withMonth(int i) 修改月
     * LocalDateTime withYear(int i) 修改年
     */
    @Test
    public void test01() {
        LocalDateTime time = getTime();
        //经过使用之后发现time中的事件有错误，应该日期是1号 ->
        //在不知道原有时间的基础上，无法进行增减操作，所有可以直接使用with方法进行修改
        LocalDateTime resultTime = time.withDayOfMonth(1);
        System.out.println("修改前的错误的时间是：" + time);
        System.out.println("修改后的错误的时间是：" + resultTime);
    }

    /**
     * with(TemporalField field, long newValue)
     */
    @Test
    public void test02() {
        LocalDateTime time = getTime();
        LocalDateTime resultTime = time.with(ChronoField.DAY_OF_MONTH, 1);
        System.out.println("修改前的错误的时间是：" + time);
        System.out.println("修改后的正确的时间是：" + resultTime);
    }

    public static LocalDateTime getTime() {
        return LocalDateTime.of(1999, 12, 12, 12, 12, 0);
    }

    /**
     * 练习
     * 使用三种方式计算2019年7月19日14时38分38秒后的3年7个月18天是什么时候？
     */
    @Test
    public void practice() {
        //初始化日期
        LocalDateTime time = LocalDateTime.of(2019, 7, 19, 14, 38, 38);
        //方式1
//        LocalDateTime resultTime = time.plusYears(3).plusMonths(7).plusDays(18);
        //方式2
//        LocalDateTime resultTime = time.plus(3, ChronoUnit.YEARS).plus(7, ChronoUnit.MONTHS).plus(18, ChronoUnit.DAYS);
        //方式3
        Period period = Period.of(3, 7, 18);
        LocalDateTime resultTime = time.plus(period);

        System.out.println("当前时间为：" + time + "，3年7个月18天后的日期是：" + resultTime);
    }
}
